package com.eastfair.venueservice.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.eastfair.venueservice.enumeration.ServiceItemAuditStateEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.venueservice.enumeration.ServiceAuditRecordServiceStateEnum;
import com.eastfair.venueservice.enumeration.ServiceAuditRecordAuditStateEnum;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 服务审核记录
 * </p>
 *
 * @author lyw
 * @since 2022-07-13
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vsm_service_audit_record")
@ApiModel(value = "ServiceAuditRecord", description = "服务审核记录")
@AllArgsConstructor
public class ServiceAuditRecord extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 服务项id
     */
    @ApiModelProperty(value = "服务项id")
    @TableField(value = "service_item_id")
    @Excel(name = "服务项id")
    private Long serviceItemId;

    /**
     * 审核备注
     */
    @ApiModelProperty(value = "审核备注")
    @Size(max = 255, message = "审核备注长度不能超过255")
    @TableField(value = "audit_remark", condition = LIKE)
    @Excel(name = "审核备注")
    private String auditRemark;

    /**
     * 服务编号
     */
    @ApiModelProperty(value = "服务编号")
    @Size(max = 64, message = "服务编号长度不能超过64")
    @TableField(value = "service_no", condition = LIKE)
    @Excel(name = "服务编号")
    private String serviceNo;

    /**
     * 服务图片
     */
    @ApiModelProperty(value = "服务图片")
    @Size(max = 255, message = "服务图片长度不能超过255")
    @TableField(value = "pic_url", condition = LIKE)
    @Excel(name = "服务图片")
    private String picUrl;

    /**
     * 服务分类id
     */
    @ApiModelProperty(value = "服务分类id")
    @TableField(value = "service_category_id")
    @Excel(name = "服务分类id")
    private Long serviceCategoryId;

    /**
     * 计量单位 字典维护
     */
    @ApiModelProperty(value = "计量单位 字典维护")
    @Size(max = 255, message = "计量单位 字典维护长度不能超过255")
    @TableField(value = "acount_unit", condition = LIKE)
    @Excel(name = "计量单位 字典维护")
    private String acountUnit;

    /**
     * 最小预定量
     */
    @ApiModelProperty(value = "最小预定量")
    @TableField(value = "min_allocated_num")
    @Excel(name = "最小预定量")
    private Integer minAllocatedNum;

    /**
     * 服务部门id/服务商id/主场id
     */
    @ApiModelProperty(value = "服务部门id/服务商id/主场id")
    @TableField(value = "service_provider_id")
    @Excel(name = "服务部门id/服务商id/主场id")
    private Long serviceProviderId;

    /**
     * 供应商类型 字典维护
     */
    @ApiModelProperty(value = "供应商类型 字典维护")
    @Size(max = 255, message = "供应商类型 字典维护长度不能超过255")
    @TableField(value = "service_provider_type", condition = LIKE)
    @Excel(name = "供应商类型 字典维护")
    private String serviceProviderType;

    /**
     * 服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}
     */
    @ApiModelProperty(value = "服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}")
    @TableField(value = "service_state")
    @Excel(name = "服务状态  #{DEFAULT:默认;ON_SHELVES:已上架;UNDER_SHELVES:已下架}", replace = {"默认_DEFAULT", "已上架_ON_SHELVES", "已下架_UNDER_SHELVES",  "_null"})
    private ServiceAuditRecordServiceStateEnum serviceState;

    /**
     * 审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}
     */
    @ApiModelProperty(value = "审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}")
    @TableField(value = "audit_state")
    @Excel(name = "审核状态 #{DEFAULT:默认;APPROVED:已审核;NOT_APPROVED:未审核}", replace = {"默认_DEFAULT", "已审核_APPROVED", "未审核_NOT_APPROVED",  "_null"})
    private ServiceItemAuditStateEnum auditState;


    @Builder
    public ServiceAuditRecord(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    Long serviceItemId, String auditRemark, String serviceNo, String picUrl, Long serviceCategoryId, String acountUnit, 
                    Integer minAllocatedNum, Long serviceProviderId, String serviceProviderType, ServiceAuditRecordServiceStateEnum serviceState, ServiceItemAuditStateEnum auditState) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.serviceItemId = serviceItemId;
        this.auditRemark = auditRemark;
        this.serviceNo = serviceNo;
        this.picUrl = picUrl;
        this.serviceCategoryId = serviceCategoryId;
        this.acountUnit = acountUnit;
        this.minAllocatedNum = minAllocatedNum;
        this.serviceProviderId = serviceProviderId;
        this.serviceProviderType = serviceProviderType;
        this.serviceState = serviceState;
        this.auditState = auditState;
    }

}
